home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 4
/
Aminet 4 - November 1994.iso
/
aminet
/
dev
/
m2
/
m2_part1.lha
/
modula
/
examples
/
src
/
sparks.mod
< prev
Wrap
Text File
|
1994-07-30
|
2KB
|
97 lines
MODULE Sparks (* From oberon version by Fridtjof Siebert, Fred Fish 380 *);
IMPORT Graphics{33}, I := Intuition{33} ;
FROM SYSTEM IMPORT BITSET, ADDRESS, ADR ;
CONST
maxLines = 64 ;
erase = 00 ;
x = 00 ;
y = 01 ;
start = 00 ;
end = 01 ;
TYPE
point = ARRAY [0..01] OF INTEGER ;
line = ARRAY [0..01] OF point ;
ColArr = ARRAY [0..31] OF INTEGER ;
VAR
i : INTEGER ;
ns : I.NewScreen ;
screen : I.ScreenPtr ;
Ciapra[0BFE001H] : SET OF [0..7] ;
lines : ARRAY [0..maxLines-1] OF line ;
l : line ;
cl : INTEGER ;
color,coldir : INTEGER ;
deltas : line ;
colarr : ColArr ;
PROCEDURE DrawLine( VAR l : line ; color : INTEGER ) ;
VAR rp : ADDRESS ;
BEGIN
rp := ADR( screen^.RastPort ) ;
Graphics.SetAPen( rp , color ) ;
Graphics.SetDrMd( rp , {} ) ;
Graphics.Move( rp , l[start,x] , l[start,y] ) ;
Graphics.Draw( rp , l[end, x] , l[end, y] ) ;
END DrawLine;
PROCEDURE Adjust( VAR c , dc : INTEGER ; max : INTEGER ) ;
VAR i : INTEGER ; VHPosR[ 0DFF006H ] : BITSET ;
BEGIN
i := dc - 8 ;
INC( c , i ) ;
IF ( c < 0 ) OR ( c >= max ) THEN
DEC( c , i ) ;
i := INTEGER( VHPosR*{0..3} );
IF i > 7 THEN INC( i , 1 ) END ;
dc := i ;
END ;
END Adjust ;
PROCEDURE z ;
BEGIN
WITH ns DO
Width := 320 ;
Height := 256 ;
Depth := 5 ;
ViewModes := { } ;
Type := I.CUSTOMSCREEN + I.SCREENQUIET ;
END ;
screen := I.OpenScreen( ns ) ;
IF screen # NIL THEN
colarr := [0000H,0F00H,0F30H,0F60H,0F90H,0FC0H,0FF0H,0CF0H,
09F0H,06F0H,03F0H,00F0H,00F3H,00F6H,00F9H,00FCH,
00FFH,00CFH,009FH,006FH,003FH,000FH,030FH,060FH,
090FH,0C0FH,0F0FH,0F3FH,0F6FH,0F9FH,0FCFH,0FFFH] ;
Graphics.LoadRGB4( ADR( screen^.ViewPort ) , ADR( colarr ) , 32 ) ;
color := 1 ;
coldir := 1 ;
REPEAT
DrawLine( lines[cl] , erase ) ;
INC( color , coldir ) ;
IF color = 1 THEN coldir := -coldir
ELSIF color = 31 THEN coldir := -coldir
END ;
CASE color OF 1,31: coldir := -coldir ELSE END ;
i := start ;
REPEAT
Adjust( l[i,x] , deltas[i,x] , screen^.Width ) ;
Adjust( l[i,y] , deltas[i,y] , screen^.Height ) ;
INC( i ) ;
UNTIL i > end ;
DrawLine( l , color ) ;
lines[cl] := l ;
INC( cl ) ;
IF cl = maxLines THEN cl := 0 END ;
UNTIL NOT( 6 IN Ciapra ) ;
I.CloseScreen( screen ) ;
END
END z ;
BEGIN z
END Sparks.